atexit関数は、プロセスが正常終了した時に呼び出される関数を登録します。ここで登録した関数は、main関数から戻る時や、exit関数が実行された時に呼び出されます。
#include <stdlib.h>
int atexit(void (*function)(void));
*functionは呼び出される関数を指定します。指定する関数は引数および、戻り値はありません。
戻り値として、正常に処理できた場合は0を、エラーの場合は0以外の値を返します。
プログラム 例
#include <stdio.h>
#include <stdlib.h>
#define SIZE 1024
/* プログラム終了メッセージ出力関数 */
void ExitMess(void);
int main()
{
FILE *fp;
char buff[SIZE];
/* プログラム終了時に実行する関数を登録 */
if (atexit(ExitMess) != 0) {
printf('atexit関数に失敗しました\n');
abort();
}
if ((fp = fopen('temp_1.txt', 'r')) == NULL) {
printf('ファイルのオープンに失敗しました\n');
abort();
}
while(fgets(buff, SIZE, fp) != NULL) {
printf('%s', buff);
}
fclose(fp);
return 0;
}
/* プログラム終了メッセージ出力 */
void ExitMess()
{
printf('★★★ 正常終了しました ★★★\n');
}
例の実行結果
$ ./atexit.exe Hello World!!. Bye. ★★★ 正常終了しました ★★★ $ $ mv temp_1.txt temp_bk.txt $ $ ./atexit.exe ファイルのオープンに失敗しました アボートしました $